<template>
  <div class="tcp-test-event">
    <h1>{{ message }}</h1>
    <h3>首先对比一下OSI协议和TCP/IP体系结构</h3>
    <table>
      <thead>
        <tr>
          <th>OSI体系结构</th>
          <th>TCP/IP体系结构</th>
          <th>五层协议体系结构</th>
          <th>功能</th>
          <th>TCP/IP协议族</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>应用层</td>
          <td rowspan="3">应用层</td>
          <td rowspan="3">应用层</td>
          <td>文件传输、电子邮件、文件服务等</td>
          <td>HTTP、SMTP、FTP等</td>
        </tr>
        <tr>
          <td>表示层</td>
          <td>数据格式转换、数据加密</td>
          <td>无</td>
        </tr>
        <tr>
          <td>会话层</td>
          <td>解除与简历接点关系</td>
          <td>无</td>
        </tr>
        <tr>
          <td>运输层</td>
          <td>运输层</td>
          <td>运输层</td>
          <td>提供端到端的数据传输服务</td>
          <td>TCP、UDP</td>
        </tr>
        <tr>
          <td>网络层</td>
          <td>网际层</td>
          <td>网络层</td>
          <td>对数据进行分包、组进行传输，选择合适的路由</td>
          <td>IP、ICMP(用于在IP主机、路由器之间传递控制消息)、OSPF(用于网际协议(IP)网络的链路状态路由协议，用于IP选路)</td>
        </tr>
        <tr>
          <td>数据链路层</td>
          <td rowspan="2">网络接口层</td>
          <td>数据链路层</td>
          <td>对传输的帧检错和纠错</td>
          <td>PPP</td>
        </tr>
        <tr>
          <td>物理层</td>
          <td>物理层</td>
          <td>确定与媒体接口传输特性</td>
          <td>IEEE802.x</td>
        </tr>
      </tbody>
    </table>
    <!-- ARP（地址解析协议，根据IP地址获得MAC地址）、 -->
    <p>注：ARP协议属于哪一层有异议，参考 <a href="https://www.zhihu.com/question/27668104">https://www.zhihu.com/question/27668104</a></p>
    <h3>TCP/IP数据传输过程</h3>
    <img src="../../images/network/tcp.png" class="img-shadow" />
    <h3>TCP的连接的建立与终止（三次握手和四次挥手）</h3>
    <img src="../../images/network/shack.png" class="img-shadow" />
    <p style="text-align:center">图片摘自：TCP IP详解卷1：协议</p>
    <p class="red">* 以下客户端为A，服务器为B</p>
    <h3>三次握手</h3>
    <ol>
      <li>A首先向B发出连接请求报文段，这个时候首部中的同步位SYN=1，同时选择一个初始的序号K。报文段不携带数据。A进入到SYN_SENT(同步已发送)状态。</li>
      <li>B收到连接请求报文，同意建立连接，向A发出确认。确认报文中，SYN和ACK都置1，确认号是K+1,与此同时，自己选择一个初始序号L,这个报文也不能携带数据。此时B进入SYN_RCVD（同步收到）状态。</li>
      <li>A收到B的确认后，还要给B确认。A进入到ESTABLISHED状态。tcp连接建立完毕。</li>
    </ol>
    <p>
    <h3>四次挥手</h3>
    <ol>
      <li>A的应用进程向其TCP发出连接释放报文段，主动关闭TCP连接。A进入FIN_WAIT1（终止等待1）状态。</li>
      <li>B确认，B进入CLOSE_WAIT(关闭等待)状态。此时TCP处于半关闭状态，A已经没有数据要发送了，如果B仍要发送数据，A仍然接收。</li>
      <li>B已经没有向A发送的数据，则B发送请求释放报文，B进入LAST_ACK（最后确认）阶段，等待A的确认。</li>
      <li>A在收到B的请求后，要发出确认，然后进入TIME_WAIT（时间等待）状态。此时，连接还未释放，等待计时器设定的时间的2MSL后，A才进入CLOSED状态。</li>
    </ol>
    <p>等待2MSL是因为：1、保证最后的ACK能够送达B。2、防止新的连接将前一个连接的延迟报文段解释成自身数据的状况</p>
    <p class="page-end">The End</p>
  </div>
</template>

<script lang="ts">
    import Vue from 'vue';
    import Component from 'vue-class-component';

    @Component({
        // 所有的组件选项都可以放在这里
    })
    export default class tcp extends Vue {
        // data 在这
        message: string = '箭头函数'
        created(){
            
        }
    }
</script>
<style lang="scss">
.tcp-test-event{
}
</style>